"""
图片管理序列化器
"""
from django.conf import settings
from django.core.exceptions import ValidationError
from fdfs_client.client import Fdfs_client
from rest_framework import serializers
from goods.models import SKUImage, SKU


class SKUSimpleModelSerializer(serializers.ModelSerializer):
    """
    新建图片可选sku
    """
    class Meta:
        model = SKU
        fields = ['id', 'name']

class ImagesModelSerializer(serializers.ModelSerializer):
    """
    图片列表
    """
    # sku = serializers.PrimaryKeyRelatedField(read_only=True)# ?????????
    class Meta:
        model = SKUImage
        fields = ['id', 
        'sku', # sku是关联主表对象，默认映射类型PrimaryKeyRelatedField，结果就是sku的id
        'image'] # ImageField类型，序列化结果是图片完整路径，因为我们重写过文件存储fdfs后端url()返回的结果

    # # 重写create，在新建的过程中介入，实现图片上传fdfs
    # def create(self, validated_data):
    #     # 获取图片数据
    #     f=validated_data.get('image') # Image字段经过校验之后是一个文件对象
    #     image_data = f.read() # 读出对象的数据
    #     conn = Fdfs_client(settings.FDFS.PATH) # 建立fdfs连接对象
    #     res = conn.upload_by_buffer(image_data) # 上传图片
    #     # 上传失败
    #     if res['Status'] != 'Upload successed.':
    #         raise ValidationError('上传fdfs失败')
    #     file_id = res['Remote file_id'] # 返回文件id
    #     # 新建模型类对象保存数据库
    #     image = SKUImage.objects.create(
    #         sku = validated_data.get('sku'),
    #         image = file_id
    #     )
    #     return image

    # # 在校验过程中介入，实现图片上传fdfs
    # def validate(self,attrs):
    #     # 获取校验后的图片数据
    #     f = attrs.get('image')
    #     image_data = f.read()
    #     # 上传图片
    #     conn = Fdfs_client(settings.FDFS_PATH)
    #     res = conn.upload_by_buffer(image_data)
    #     if res['Status'] !=  'Upload successed.':
    #         raise ValidationError('上传图片失败')
    #     file_id = res['Remote file_id']
    #     # 把有效数据中的image字段设置为文件id
    #     attrs['image'] = file_id
    #     return attrs